<?php
/**
 * Created by PhpStorm.
 * User: DELL-PC
 * Date: 2018/8/2
 * Time: 9:52
 */

namespace J\Schema;


use J\Schema\Collection\Element\IHelper;
use J\ReadOnly;

interface IElement
{
    public function isBelongs();

    // public function isTree();

    // public function isLocal();

    /**
     * @return ReadOnly
     */
    public function getAttribute();

    /**
     * @return string
     */
    public function getLabel();

    /**
     * @return string
     */
    public function getName();

    /**
     * @return string ColumnName
     */
    public function getColumnName();

    /**
     * @return string FieldName
     */
    public function getFieldName();

    /**
     * @return string FieldType
     */
    public function getFieldType();

    /**
     * @return int ColumnType
     */
    public function getColumnType();

    /**
     * 创建精灵
     *
     * @param mixed $value
     *
     * @param string $operator
     * @param mixed $default 默认值
     * @param bool $raw 原始值
     *
     * @return Sprite
     */
    public function getSprite($value, $operator = null, $default = null, $raw = false);

    /**
     * 唯一值验证
     * @param mixed $value
     * @return boolean
     */
    public function unique($value);

    /**
     * 验证器验证数据有效性
     *
     * @param $value
     *
     * @return bool|null
     */
    public function valid($value);

    /**
     * 处理REQUEST输入值（不进行验证）
     *
     * @param mixed $default
     * @return mixed
     */
    public function getInputValue($default = null);

    /**
     * @return ICollection
     */
    public function getCollection();

    /**
     * @return boolean
     */
    public function canNull();

    /**
     * @return boolean
     */
    public function must();

    /**
     * @return boolean
     */
    public function hasDefault();

    public function getDefault();

    /**
     * @param mixed $where
     *
     * @return array [value => ['label' => label, 'value' => value]]
     */
    public function getOptions($where = true);

    /**
     * @return IHelper
     */
    public function getOperatorHelper();

    /**
     * 结果集修正
     *
     * @param array $rs
     * @param bool $raw
     */
    public function fillValue(&$rs, $raw = false);
}